package br.com.it4.zmed.entity;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * Entidade básica representando o laudo.
 * 
 * @author Mozart Silva (mozart.vsilva@gmail.com)
 * 
 */
@Entity
@Table(name = "ZME_LAUDO", schema = "ZMED")
public class Laudo {

    @Id
    @SequenceGenerator(name = "SEQ_ZME_LAUDO_ID", sequenceName = "ZMED.SEQ_ZME_LAUDO")
    @GeneratedValue(generator = "SEQ_ZME_LAUDO_ID", strategy = GenerationType.SEQUENCE)
    @Column(name = "LAU_CODIGO")
    private Long codigo;
    
    @Temporal(TemporalType.DATE)
    @Column(name = "ATE_DATA")
    private Date data;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @Column(name = "ATE_CODIGO")
    private Atendimento atendimento;

    /** O exame do paciente realizado. */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "EXA_CODIGO")
    private Exame exame;

    /** O médico requisitante do exame. */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "MED_CRM_MEDICO_REQUISITANTE")
    private Medico medicoRequisitante;

    /** O médico que realizou o exame. */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "MED_CRM_MEDICO")
    private Medico medico;

    /**
     * @return O codigo a ser recuperado.
     */
    public Long getCodigo() {
        return codigo;
    }

    /**
     * @param codigo
     *            O codigo a ser atribuido.
     */
    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }

    /**
     * @return O data a ser recuperado.
     */
    public Date getData() {
        return data;
    }

    /**
     * @param data
     *            O data a ser atribuido.
     */
    public void setData(Date data) {
        this.data = data;
    }

    /**
     * @return O atendimento a ser recuperado.
     */
    public Atendimento getAtendimento() {
        return atendimento;
    }

    /**
     * @param atendimento
     *            O atendimento a ser atribuido.
     */
    public void setAtendimento(Atendimento atendimento) {
        this.atendimento = atendimento;
    }

    /**
     * @return O exame a ser recuperado.
     */
    public Exame getExame() {
        return exame;
    }

    /**
     * @param exame
     *            O exame a ser atribuido.
     */
    public void setExame(Exame exame) {
        this.exame = exame;
    }

    /**
     * @return O medicoRequisitante a ser recuperado.
     */
    public Medico getMedicoRequisitante() {
        return medicoRequisitante;
    }

    /**
     * @param medicoRequisitante
     *            O medicoRequisitante a ser atribuido.
     */
    public void setMedicoRequisitante(Medico medicoRequisitante) {
        this.medicoRequisitante = medicoRequisitante;
    }

    /**
     * @return O medico a ser recuperado.
     */
    public Medico getMedico() {
        return medico;
    }

    /**
     * @param medico
     *            O medico a ser atribuido.
     */
    public void setMedico(Medico medico) {
        this.medico = medico;
    }

}
